﻿#if NET6_0_OR_GREATER

using System;
using System.Collections.Generic;
using System.Text;

namespace zijian666.AnyExtensions;
/// <summary>
/// 提供对 <see cref="ValueTask"/> 和 <see cref="ValueTask{TResult}"/> 的扩展方法。
/// </summary>
public static class ValueTaskExtensions
{
    /// <summary>
    /// 同步等待一个 <see cref="ValueTask"/> 完成。
    /// </summary>
    /// <param name="task">需要等待的 <see cref="ValueTask"/>。</param>
    /// <exception cref="InvalidOperationException">如果任务未正确初始化，则可能抛出。</exception>
    /// <exception cref="AggregateException">如果任务在执行过程中抛出异常，则会将异常封装在 <see cref="AggregateException"/> 中抛出。</exception>
    public static void Wait(this ValueTask task)
    {
        if (task.IsCompleted)
        {
            return;
        }
        task.ConfigureAwait(false).GetAwaiter().GetResult();
    }

    /// <summary>
    /// 同步等待一个 <see cref="ValueTask{TResult}"/> 完成。
    /// </summary>
    /// <typeparam name="T">任务返回的结果类型。</typeparam>
    /// <param name="task">需要等待的 <see cref="ValueTask{TResult}"/>。</param>
    /// <exception cref="InvalidOperationException">如果任务未正确初始化，则可能抛出。</exception>
    /// <exception cref="AggregateException">如果任务在执行过程中抛出异常，则会将异常封装在 <see cref="AggregateException"/> 中抛出。</exception>
    public static void Wait<T>(this ValueTask<T> task)
    {
        if (task.IsCompleted)
        {
            return;
        }
        _ = task.ConfigureAwait(false).GetAwaiter().GetResult();
    }
}

#endif